Minacce Informatiche e Perdite Economiche Globali¶

Questo notebook analizza le perdite economiche causate da incidenti di cybersecurity nel periodo che va dal2015 al 2024, focalizzandos sui paesi.
L’obiettivo principale è quello di visualizzare e confrontare le perdite globali aggregate attribuite agli attacchi informatici, fornendo una panoramica visiva dell’impatto economico della criminalità digitale su scala mondiale. I dati sono stati aggregati per costruire una rappresentazione cumulativa per nazione, con l'obiettivo di evidenziare quali paesi hanno subito il maggior impatto economico.

Struttura del Dataset: Global_Cybersecurity_Threats_2015-2024¶

Sono stati utilizzati i seguenti campi del dataset:

  • country: nome del paese a cui si riferiscono i dati.
  • financial_loss_(in_million_$): stima della perdita economica totale in milioni di dollari (USD), causata da attacchi informatici durante il periodo considerato.

Mappa Globale delle Perdite Economiche¶

Questa visualizzazione mostra l’impatto economico cumulativo causato da attacchi informatici in ciascun paese, nel periodo 2015–2024.

In [2]:
import pandas as pd
import plotly.express as px
df = pd.read_csv("Global_Cybersecurity_Threats_2015-2024.csv")
df.columns = df.columns.str.strip().str.lower().str.replace(" ", "_")
import plotly.io as pio
pio.renderers.default = "notebook"

# somma delle perdite per paese
map_data = df.groupby('country', as_index=False)['financial_loss_(in_million_$)'].sum()
map_data['country'] = map_data['country'].replace({
    'USA': 'United States',
    'UK': 'United Kingdom'
})

# Rotazione del globo 
for lon in range(0, 360, 3):
    fig = px.choropleth(
        map_data,
        locations='country',
        locationmode='country names',
        color='financial_loss_(in_million_$)',
        hover_name='country',
        hover_data={'financial_loss_(in_million_$)': ':.2f'},
        color_continuous_scale=px.colors.sequential.Magma_r,
    )

    # proiezione tipo "globo ruotata progressivamente
    fig.update_geos(
        projection_type="orthographic",
        projection_rotation=dict(lon=lon, lat=0),
        showland=True, landcolor="#444",
        showocean=True, oceancolor="#1d2b44",
        showcountries=True, showcoastlines=True,
        coastlinecolor="white", showframe=False
    )

    # Stile 
    fig.update_layout(
        plot_bgcolor='#050b18',
        paper_bgcolor='#050b18',
        geo_bgcolor='#050b18',
        font_color="white",
        margin=dict(t=60, l=10, r=10, b=10),
        coloraxis_colorbar=dict(
            title="Perdite ($M)",
            tickprefix="$",
            ticks="outside"
        )
    )

fig.show()